Known attempts at evolving a software science have tried to capture certain properties of programs such as program size, program volume, complexity, etc. However, these do not shed much light on the working of the logical processes in a program. There have also been efforts to discipline the development of software to improve its error proneness and make its reliability converge to that of hardware by structuring and constraining the programs via architectural constraints, design methodologies, hardware-like paradigms, language and programming constructs, information hiding, structured design, object orientation, encapsulation, reuse, patterns, etc. Since the implementations of these methodologies prescribe distinct forms and procedures, it is difficult to determine the fundamental mechanisms by which they bring their respective benefits. The question, which arises then, is whether these are all fundamentally different or is there a common underlying basis? Turns out that there is a possible unification.
The large number of states generally possible in software compared to that in hardware systems makes the analysis of software systems very difficult. The rapid increase in the number of states with increase in size of software increases its complexity rapidly requiring transition from microscopic analysis to the analysis of behavior in the large or macroscopic behavior. Therefore, it is a drawback of the prior art that known attempts have not realized the above issue and therefore have not been successful at addressing the reliability of large software systems directly. In what follows, we present our attempts at trying to apply methods of statistical mechanics and information theory to conceptualize a large software scenario to evolve a common basis for construction of reliable software systems by constraining the states through which software traverses.
Thus, a need exists for a model for a large software system that helps in evaluating the macroscopic behavior of the system by representing it as a statistical ensemble of variables embedded in a logical environment that controls the microscopic behavior of the variables.